package cn.shengchao.examstar.ai.application.dto;

import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 学习计划数据传输对象
 * 用于应用层与外部系统的数据交换
 */
@Data
@Builder
public class StudyPlanDTO {
    
    /**
     * 学习计划ID
     */
    private String id;
    
    /**
     * 用户ID
     */
    private String userId;
    
    /**
     * 类目类型名称
     */
    private String specificationType;
    
    /**
     * 掌握程度描述
     */
    private String degreeOfMastery;
    
    /**
     * 掌握程度代码
     */
    private String degreeOfMasteryCode;
    
    /**
     * 每日学习时长（分钟）
     */
    private Integer dailyStudyDurationMinutes;
    
    /**
     * 学习期间开始时间
     */
    private LocalDateTime studyPeriodBeginTime;
    
    /**
     * 学习期间结束时间
     */
    private LocalDateTime studyPeriodEndTime;
    
    /**
     * 学习建议
     */
    private String studyAdvice;
    
    /**
     * 状态名称
     */
    private String status;
    
    /**
     * 状态代码
     */
    private String statusCode;
    
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    
    /**
     * 是否可以修改
     */
    public boolean canModify() {
        return "DRAFT".equals(statusCode) || "ACTIVE".equals(statusCode) || "PAUSED".equals(statusCode);
    }
    
    /**
     * 是否正在进行中
     */
    public boolean isInProgress() {
        return "ACTIVE".equals(statusCode);
    }
    
    /**
     * 是否已完成
     */
    public boolean isCompleted() {
        return "COMPLETED".equals(statusCode);
    }
    
    /**
     * 是否已取消
     */
    public boolean isCancelled() {
        return "CANCELLED".equals(statusCode);
    }
    
    /**
     * 获取学习期间天数
     */
    public long getStudyPeriodDays() {
        if (studyPeriodBeginTime != null && studyPeriodEndTime != null) {
            return java.time.Duration.between(studyPeriodBeginTime, studyPeriodEndTime).toDays();
        }
        return 0;
    }
    
    /**
     * 获取每日学习时长（小时）
     */
    public double getDailyStudyDurationHours() {
        return dailyStudyDurationMinutes != null ? dailyStudyDurationMinutes / 60.0 : 0.0;
    }
}